#!/bin/bash

. /etc/rc.conf
. /etc/rc.d/functions

# source application-specific settings
[ -f /etc/conf.d/cpufreq ] && . /etc/conf.d/cpufreq

case "$1" in
  start)
    stat_busy "Setting cpufreq governing rules"

	params=""
	if [ -n "$governor" ]; then
		mod="cpufreq_$governor"
		params="-g $governor"
		grep -qw "$governor" /sys/devices/system/cpu/cpu*/cpufreq/scaling_available_governors || modprobe -q $mod
		if [ $? -eq 0 ]; then
			if [ "$min_freq" != "" ]; then
				params="$params -d $min_freq"
			fi
			if [ "$max_freq" != "" ]; then
				params="$params -u $max_freq"
			fi
		else
			stat_busy "    Cannot load governor module '$governor'"
			stat_fail
			exit
		fi
	fi

	if [ "$params" != "" ]; then
		CPUS=$(sed -ne 's/^processor.* \([0-9]\+\)$/\1/p' /proc/cpuinfo)
		stat_append ", cpu"
		for cpu in $CPUS; do
			stat_append " $cpu"
			cpufreq-set -c $cpu $params
			if [ "$freq" != "" ]; then
				cpufreq-set -c $cpu -f $freq
			fi
		done
		stat_done
	else
		stat_busy "    Invalid configuration in /etc/conf.d/cpufreq"
		stat_fail
	fi
	;;
  stop)
	# nothing to do
	;;
  restart)
	$0 start
	;;
  set)
	# TODO: make callable... "cpufreq set 800MHz"
	;;
  *)
	echo "usage: $0 {start|stop|restart}"  
esac
exit 0
